﻿#define _CRT_SECURE_NO_WARNINGS 1
//计算机有4个槽，每个槽放一个球，颜色可能是红色（R）、黄色（Y）、绿色（G）或蓝色（B）。
//例如，计算机可能有RGGB 4种（槽1为红色，槽2、3为绿色，槽4为蓝色）。作为用户，你试图猜出颜色组合。
//打个比方，你可能会猜YRGB。要是猜对某个槽的颜色，则算一次“猜中”；要是只猜对颜色但槽位猜错了，则算一次“伪猜中”。
//注意，“猜中”不能算入“伪猜中”。给定一种颜色组合solution和一个猜测guess，编写一个方法，返回猜中和伪猜中的次数answer，
//其中answer[0]为猜中的次数，answer[1]为伪猜中的次数。
//
//#include <stdio.h>
//#include <stdlib.h>
//
//int* masterMind(char* solution, char* guess, int* returnSize) {
//    int* answer = (int*)calloc(2, sizeof(int));
//    int count = 0;
//    int countr = 0;
//    *returnSize = 2;
//    for (int i = 0; solution[i] != '\0'; i++)
//    {
//        if (solution[i] == guess[i])
//        {
//            answer[0] = (++countr);
//        }
//    }
//    for (int i = 0; guess[i] != '\0'; i++)
//    {
//        for (int j = 0; solution[j] != '\0'; j++)
//        {
//            if (guess[i] == solution[j])
//            {
//                answer[1] = (++count);
//                solution[j] = 1;
//                break;
//            }
//        }
//    }
//    answer[1] = answer[1] - answer[0];
//    return answer;
//}
//
//例题二:
//现在有一个长度为 n 的正整数序列，其中只有一种数值出现了奇数次，其他数值均出现偶数次，请你找出那个出现奇数次的数值。
//数据范围：1≤n≤2×10^6
//#include <stdio.h>
//
//int main() 
//{
//    int n = 0;
//    scanf("%d", &n);
//    int arr[2000001] = { 0 };
//    for (int i = 0; i < n; i++)
//    {
//        scanf("%d", &arr[i]);
//    }
//    int num = 0;
//    for (int i = 0; i < n; i++)
//    {
//        num ^= arr[i];
//    }
//    printf("%d\n", num);
//
//    return 0;
//}
//
//例题三:
//给定一个长度为n的数组nums，请你找到峰值并返回其索引。数组可能包含多个峰值，在这种情况下，返回任何一个所在位置即可。
//1.峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于
//2.假设 nums[-1] = nums[n] =−∞
//3.对于所有有效的 i 都有 nums[i] != nums[i + 1]
//4.你可以使用O(logN)的时间复杂度实现此问题吗？
//#include <stdio.h>
//
//int findPeakElement(int* nums, int numsLen) {
//    // write code here
// 
//    int i = 0;
//    for (i = 0; i < numsLen; i++)
//    {
//        if ((i == 0 && nums[i] > nums[i + 1]) || (i == numsLen - 1 && nums[i - 1] < nums[i]))
//        {
//            return i;
//        }
//        else
//        {
//            if (nums[i] > nums[i - 1] && nums[i] > nums[i + 1])
//                return i;
//        }
//    }
//
//    return NULL;
//}